/*
Date:20210423 0:20pm
key:1.每轮都是从k开始的了，不用回头.其他都是老套路，就是很慢。
*/
class Solution {
public:
    void back(vector<int>& nums,int k,vector<int>& v,set<vector<int>>&S,int*flag)
    {
        if(k==nums.size())
        {
            return ;
        }
        else
        {
            for(int i=k;i<nums.size();i++)
            {
                if(flag[i]!=1)
                {
                    v.push_back(nums[i]);
                    vector<int>v1=v;
                    sort(v1.begin(),v1.end());
                    S.insert(v1);
                    flag[i]=1;
                    back(nums,k+1,v,S,flag);
                    flag[i]=0;
                    v.pop_back();
                }
            }
        }
    }
    vector<vector<int>> subsets(vector<int>& nums)
    {
        int*flag=new int[nums.size()];
        for(int i=0;i<nums.size();i++)
        {
            flag[i]=0;
        }
        vector<int> v;
        set<vector<int>>S;
        back(nums,0,v,S,flag);

        vector<vector<int>>V;
        V.resize(S.size()+1);

        int i=0;
        for(auto j:S)
        {
            V[i]=j;
            i++;
        }
        vector<int> v3;
        V[V.size()-1]=v3;

        return V;
    }
};